import {
  CallHandler,
  ExecutionContext,
  Injectable,
  NestInterceptor,
  BadGatewayException,
} from '@nestjs/common';
import { Observable, map, throwError, catchError } from 'rxjs';
interface Data<T> {
  data: T;
}

@Injectable()
export class ResponseInterceptor<T> implements NestInterceptor {
  /**
   * CallHandler 接口实现了 handle() 方法，
   * 你可以使用它在拦截器中的某个点调用路由处理程序方法。
   * 如果在 intercept() 方法的实现中不调用 handle() 方法，则根本不会执行路由处理程序方法。
   *
   */
  intercept(context: ExecutionContext, next: CallHandler): Observable<Data<T>> {
    // 在这里可以对响应进行处理
    return next.handle().pipe(
      map((data) => ({
        data,
        code: 0,
        message: '请求成功',
        success: true,
      })),
    );
  }
}

// @Injectable()
// export class ErrorsInterceptor implements NestInterceptor {
//   intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
//     console.log('ErrorsInterceptor');
//     return next
//       .handle()
//       .pipe(catchError((err) => throwError(() => new BadGatewayException())));
//   }
// }
